﻿<cfscript>
/** 
* Senate Frameworks taskClassProperty
* 
* @hint "The Task property object handler." 
*/ 

component 
	displayname="public.service.handler.taskClassProperty" 
	output=false 
	accessors=true 
	{

	/* PROPERTIES */
	property type="boolean" name="Locked" default="false" hint="是否禁止修改";
	property type="boolean" name="Published" default="false" hint="是否对外公布排课结果";
	property type="boolean" name="Subscribe" default="false" hint="是否禁止学生选课";
	property type="boolean" name="Discharge" default="false" hint="是否禁止学生退课";
	property type="boolean" name="Conflict" default="false" hint="是否忽略时间冲突";
	property type="boolean" name="ArrangeDone" default="false" hint="是否持久化排课结果";
	property type="boolean" name="Cancel" default="false" hint="是否撤销";

	property type="boolean" name="MinerLanguage" default="false" hint="是否小语种计划课程";
	property type="boolean" name="UnplanedTask" default="false" hint="是否临时增开课程";

	/**
	* @hint "初始化对象"
	* 
	* @Locked "是否禁止修改"
	* @Published "是否对外公布排课结果"
	* @Subscribe "是否禁止学生选课"
	* @Discharge "是否禁止学生退课"
	* @Conflict "是否忽略时间冲突"
	* @ArrangeDone "是否持久化排课结果"
	* @Cancel "是否撤销"
	* @MinerLanguage "是否小语种计划课程"
	* @UnplanedTask "是否临时增开课程"
	*/
	public public.service.handler.taskClassProperty function init( boolean Locked=false, boolean Published=false, 
																	boolean Subscribe=false, boolean Discharge=false, 
																	boolean Conflict=false, boolean ArrangeDone=false, boolean Cancel=false,
																	boolean MinerLanguage=false, boolean UnplanedTask=false ) output=false {

		setLocked( arguments.Locked );
		setPublished( arguments.Published );
		
		setSubscribe( arguments.Subscribe );
		setDischarge( arguments.Discharge );
		
		setConflict( arguments.Conflict );
		setArrangeDone( arguments.ArrangeDone );
		
		setCancel( arguments.Cancel );

		setMinerLanguage( arguments.MinerLanguage );
		setUnplanedTask( arguments.UnplanedTask );

		return this;
	}
	
	/**
	* @hint "将上述属性转换为属性字符串"
	*/
	public string function stringProperty() output=false {
		
		var prop = "";
		
		/* 执行序列化 */
		if (getLocked()) { prop = prop & "1"; } else { prop = prop & "0"; }
		if (getPublished()) { prop = prop & "1"; } else { prop = prop & "0"; }

		if (getSubscribe()) { prop = prop & "1"; } else { prop = prop & "0"; }
		if (getDischarge()) { prop = prop & "1"; } else { prop = prop & "0"; }

		if (getConflict()) { prop = prop & "1"; } else { prop = prop & "0"; }
		if (getArrangeDone()) { prop = prop & "1"; } else { prop = prop & "0"; }
		
		if (getCancel()) { prop = prop & "1"; } else { prop = prop & "0"; }

		if (getMinerLanguage()) { prop = prop & "1"; } else { prop = prop & "0"; }
		if (getUnplanedTask()) { prop = prop & "1"; } else { prop = prop & "0"; }

		return left(prop & "00000000000000000000", 20);
		
	}
	
	/**
	* @hint "将属性字符串转换为对象属性"
	* 
	* @fString "属性字符串"
	*/
	public void function parseProperty( required string fString ) output=false {
		
		var i = 0;
		
		for (i=1; i <= len(arguments.fString); i++) {
			
			switch (i) {
				
				case 1:
					/* 第1位 是否禁止修改 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setLocked(true); } else { setLocked(false); }
					break;

				case 2:
					/* 第2位 是否对外公布排课结果 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setPublished(true); } else { setPublished(false); }
					break;
				
				case 3:
					/* 第3位 是否禁止学生选课 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setSubscribe(true); } else { setSubscribe(false); }
					break;

				case 4:
					/* 第4位 是否禁止学生退课 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setDischarge(true); } else { setDischarge(false); }
					break;
				
				case 5:
					/* 第5位 是否忽略时间冲突 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setConflict(true); } else { setConflict(false); }
					break;
				
				case 6:
					/* 第6位 是否持久化排课结果 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setArrangeDone(true); } else { setArrangeDone(false); }
					break;
				
				case 7:
					/* 第7位 是否撤班 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setCancel(true); } else { setCancel(false); }
					break;
				
				case 8:
					/* 第8位 是否小语种计划课程 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setMinerLanguage(true); } else { setMinerLanguage(false); }
					break;
					
				case 9:
					/* 第9位 是否临时增开课程 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setUnplanedTask(true); } else { setUnplanedTask(false); }
					break;
			}
			
		}
	}

	
}

</cfscript>